import java.util.Random;

/**
 * 加减法口算练习系统-v0.2
 * 核心功能（修正后）：
 * 1. 生成50道100以内（0-99）加减法习题；
 * 2. 每个算式附带标准答案；
 * 3. 加法和≤100，减法差≥0（符合口算练习合理性）；
 * 4. 每行整齐显示3道算式，排版美观。
 */
public class CalculationSystemV02 {
    // 可配置常量（方便灵活调整）
    private static final int TOTAL_QUESTIONS = 50;    // 总题数（固定50道）
    private static final int QUESTIONS_PER_LINE = 3;  // 每行显示题数（可改为2/4等）
    private static final int NUM_MAX = 99;            // 数字最大值（100以内）
    private static final int SUM_UPPER_LIMIT = 100;   // 加法和的上限
    private static final int DIFF_LOWER_LIMIT = 0;    // 减法差的下限

    public static void main(String[] args) {
        // 打印系统标题及功能说明
        System.out.println("==================== 加减法口算练习系统-v0.2 ====================");
        System.out.println("功能说明：1. 100以内加减法（0-99）；2. 附带标准答案；3. 加法和≤100；4. 减法差≥0；5. 每行3道题");
        System.out.println("===============================================================");

        Random random = new Random();
        StringBuilder lineBuilder = new StringBuilder();  // 拼接每行的算式，保证对齐

        // 循环生成50道合规习题
        for (int i = 1; i <= TOTAL_QUESTIONS; i++) {
            // 生成1道完整的合规算式（含序号、表达式、答案）
            String question = generateValidQuestion(i, random);
            // 格式化每个算式为固定宽度（左对齐，占30字符），确保每行对齐
            lineBuilder.append(String.format("%-30s", question));

            // 每满3道题，输出当前行并重置拼接器
            if (i % QUESTIONS_PER_LINE == 0) {
                System.out.println(lineBuilder.toString().trim());
                lineBuilder.setLength(0);  // 清空，准备下一行
            }
        }

        // 处理最后一行（不足3道题的剩余部分）
        if (lineBuilder.length() > 0) {
            System.out.println(lineBuilder.toString().trim());
        }

        System.out.println("===============================================================");
        System.out.println("练习结束！可对照答案自查～");
    }

    /**
     * 生成1道合规的加减法算式（含序号、表达式、答案）
     * @param index 题序（1-50）
     * @param random 随机数生成器
     * @return 格式化的算式字符串（如 " 1. 32 + 45 = 77"）
     */
    private static String generateValidQuestion(int index, Random random) {
        int num1, num2, result;
        char operator;
        int opType = random.nextInt(2);  // 0=加法，1=减法（50%概率）

        if (opType == 0) {
            // 加法：确保 num1 + num2 ≤ 100（合规约束）
            // 生成逻辑：先随机num1（0-99），再随机num2（0-100-num1），直接满足和≤100，无需循环重试
            num1 = random.nextInt(NUM_MAX + 1);  // [0,99]
            num2 = random.nextInt(SUM_UPPER_LIMIT - num1 + 1);  // [0, 100-num1]
            result = num1 + num2;
            operator = '+';
        } else {
            // 减法：确保 num1 - num2 ≥ 0（合规约束）
            // 生成逻辑：先随机num1（0-99），再随机num2（0-num1），直接满足差≥0，无需循环重试
            num1 = random.nextInt(NUM_MAX + 1);  // [0,99]
            num2 = random.nextInt(num1 + 1);     // [0, num1]
            result = num1 - num2;
            operator = '-';
        }

        // 格式化算式：序号占2位、数字占2位、答案占2位，确保整体对齐
        return String.format("%2d. %2d %c %2d = %2d", index, num1, operator, num2, result);
    }
}